window.app = {
	/**
	 * 后端服务发布的url地址
	 */
	// serverUrl: 'http://192.168.98.109:8080',
	serverUrl: 'http://192.168.0.100:8080',
	
	/**
	 * 图片服务器的url地址
	 */
	// imgServerUrl: 'http://192.168.98.100:88/candywall/',
	imgServerUrl: 'http://114.215.211.1:8888/group1/',
	
	/**
	 * Netty服务后端发布的URL地址
	 */
	// nettyServerUrl: "ws://192.168.98.109:8888/ws",
	nettyServerUrl: "ws://192.168.0.100:8888/ws",
	
	/**
	 * 默认头像小图片的路径
	 */
	default_face_img_src: 'image/helmos.png',
	
	/**
	 * 默认头像大图片的路径
	 */
	default_face_img_big_src: 'image/helmos.png',
	
	/**
	 * 判断字符串是否为空
	 * @param {Object} str
	 * true: 代表不为空
	 * false: 代表为空
	 */
	isNotNull: function(str) {
		if(str != null && str != undefined && str != "") {
			return true;
		}
		return false;
	},
	/**
	 * 封装消息提示框，mui默认的alert提示框不支持居中和自定义图标，
	 * 所以使用h5+中的toast
	 * @param {Object} msg
	 * @param {Object} type
	 */
	showToast: function(msg, type) {
		plus.nativeUI.toast(msg, {icon: "image/" + type + ".png", verticalAlign: "center"});
	},
	/**
	 * 保存用户的全局对象
	 * @param {Object} userinfo
	 */
	setGlobalUserInfo: function(userinfo) {
		var userinfoStr = JSON.stringify(userinfo);
		plus.storage.setItem("userinfo", userinfoStr);
	},
	/**
	 * 获取用户的全局对象
	 * @param {Object} userinfo
	 */
	getGlobalUserInfo: function() {
		return JSON.parse(plus.storage.getItem("userinfo"));
	},
	/**
	 * 退出登录，清空用户全局对象和通讯录中的好友列表
	 */
	logout: function() {
		//plus.storage.removeItem("userinfo");
		//plus.storage.removeItem("addressList");
		plus.storage.clear();
	},
	/**
	 * 保存用户的联系人列表
	 * @param {Object} addressList 
	 */
	setAddressList: function(addressList) {
		plus.storage.setItem("addressList", JSON.stringify(addressList));
	},
	
	/**
	 * 获取用户的联系人列表
	 */
	getAddressList: function() {
		return JSON.parse(plus.storage.getItem("addressList"));
	},
	/**
	 * 根据好友的用户ID获取通讯录中的某一个好友信息
	 * @param {Object} friendUserId
	 */
	getFriendUserinfoFromAddressListById: function(friendUserId) {
		var friends = app.getAddressList();
		for(var i = 0; i < friends.length; i++) {
			if(friends[i].friendUserId == friendUserId) {
				return friends[i];
			}
		}
		
		return null;
	},
	/**
	 * 判断当前设备是否联网
	 */
	isConnectNetWork: function() {
		var connectionStatus = plus.networkinfo.getCurrentType();
		if(connectionStatus == plus.networkinfo.CONNECTION_UNKNOW ||
		   connectionStatus == plus.networkinfo.CONNECTION_NONE) {
			return false;
		}
		return true;
	},
	/**
	 * 判断当前的socket状态是否已经连接
	 */
	socketIsReady: function(socket) {
		if(socket != null && socket != undefined && socket.readyState == WebSocket.OPEN) {
			return true;
		}
		return false;
	},
	/**
	 * 发送消息的动作
	 */
	MsgActionEnum: {
		CONNECT: 1,  	// 第一次（或重连）初始化连接
		CHAT: 2,     	// 聊天消息
		SIGNED: 3,   	// 消息签收，这里的签收不是指消息是否被接收方用户已读和未读的状态，而是指消息是否发送到接收方的手机。
		KEEPALIVE: 4,   // 客户端保持心跳
		PULL_FRIENDS: 5 // 刷新通讯录，重新拉取好友列表
	},
	/**
	 * 聊天内容对象，和后端的ChatMsgDTO保持一致
	 * @param {Object} sendUserId		：发送者的用户ID
	 * @param {Object} acceptUserId		：接收者的用户ID
	 * @param {Object} msg				：聊天内容		
	 * @param {Object} msgId			：用于用户消息的签收
	 */
	ChatMsgDTO: function(sendUserId, acceptUserId, msg, msgId) {
		this.sendUserId = sendUserId;
		this.acceptUserId = acceptUserId;
		this.msg = msg;
		this.msgId = msgId;
	},
	/**
	 * 消息传输对象，和后端的DataContentDTO保持一致
	 * @param {Object} action		：动作类型
	 * @param {Object} chatMsgDTO	：用户的聊天内容
	 * @param {Object} extend		：扩展字段
	 */
	DataContentDTO: function(action, chatMsgDTO, extend) {
		this.action = action;
		this.chatMsgDTO = chatMsgDTO;
		this.extend = extend;
	},
	/**
	 * 单个聊天记录的对象
	 * @param {Object} myUserId
	 * @param {Object} friendUserId
	 * @param {Object} msg
	 * @param {Object} isMyMsg
	 */
	ChatHistory: function(myUserId, friendUserId, msg, isMyMsg) {
		this.myUserId = myUserId;
		this.friendUserId = friendUserId;
		this.msg = msg;
		this.isMyMsg = isMyMsg;
	},
	/**
	 * 聊天快照对象
	 * @param {Object} friendUserId
	 * @param {Object} msg
	 * @param {Object} isRead
	 */
	ChatSnapshot: function(friendUserId, msg, isRead) {
		this.friendUserId = friendUserId;
		this.msg = msg;
		this.isRead = isRead;
	},
	/**
	 * 保存用户的聊天记录
	 * @param {Object} myUserId		：自己的ID
	 * @param {Object} friendUserId	：好友的ID
	 * @param {Object} isMyMsg		：true 自己发的消息，false 好友发的消息
	 */
	saveUserChatHistory: function(myUserId, friendUserId, msg, isMyMsg) {
		var chatKey = "chat-" + myUserId + "-" + friendUserId;
		
		// 从本地缓存查看聊天记录是否存在
		var chatHistoryListStr = plus.storage.getItem(chatKey);
		var chatHistoryList = [];
		if(app.isNotNull(chatHistoryListStr)) {
			// 如果不为空，转成对应的JSON数组
			chatHistoryList = JSON.parse(chatHistoryListStr);
		}
		
		// 构建聊天记录对象
		var chatMsgObj = new app.ChatHistory(myUserId, friendUserId, msg, isMyMsg);
		
		// 向List中追加聊天记录对象
		chatHistoryList.push(chatMsgObj);
		
		// 将聊天记录存到缓存中
		plus.storage.setItem(chatKey, JSON.stringify(chatHistoryList));
	},
	/**
	 * 获取用户聊天记录
	 * @param {Object} myUserId
	 * @param {Object} friendUserId
	 */
	getUserChatHistoryList: function(myUserId, friendUserId) {
		var chatKey = "chat-" + myUserId + "-" + friendUserId;
		// 从本地缓存查看聊天记录是否存在
		var chatHistoryListStr = plus.storage.getItem(chatKey);
		var chatHistoryList = [];
		if(app.isNotNull(chatHistoryListStr)) {
			// 如果不为空，转成对应的JSON数组
			chatHistoryList = JSON.parse(chatHistoryListStr);
		}
		
		return chatHistoryList;
	},
	/**
	 * 删除当前用户和某个好友的聊天记录
	 * @param {Object} myUserId
	 * @param {Object} friendUserId
	 */
	delUserChatHistory: function(myUserId, friendUserId) {
		plus.storage.removeItem("chat-" + myUserId + "-" + friendUserId);
	},
	/**
	 * 聊天记录的快照，仅仅保存每次和朋友聊天的最后一条记录
	 * @param {Object} myUserId
	 * @param {Object} friendUserId
	 * @param {Object} msg
	 * @param {Object} isRead	：消息已读还是未读
	 */
	saveUserChatSnapshot: function(myUserId, friendUserId, msg, isRead) {
		var chatKey = "chat-snapshot" + myUserId;
		
		// 从本地缓存查看聊天快照的list
		var chatSnapshotListStr = plus.storage.getItem(chatKey);
		var chatSnapshotList = [];
		if(app.isNotNull(chatSnapshotListStr)) {
			// 如果不为空，转成对应的JSON数组
			chatSnapshotList = JSON.parse(chatSnapshotListStr);
			// 循环快照list，删除和friendUserId匹配的旧快照记录
			for(var i = 0; i < chatSnapshotList.length; i++) {
				if(chatSnapshotList[i].friendUserId == friendUserId) {
					// 删除已经存在的friendUserId对应的快照对象
					chatSnapshotList.splice(i, 1);
					break;
				}
			}
		}
		
		// 构建聊天快照对象
		var chatSnapshotObj = new app.ChatSnapshot(friendUserId, msg, isRead);
		
		// 向List开头追加聊天快照对象
		chatSnapshotList.unshift(chatSnapshotObj);
		
		// 将聊天快照list存到缓存中
		plus.storage.setItem(chatKey, JSON.stringify(chatSnapshotList));
	},
	/**
	 * 获取用户聊天快照列表
	 * @param {Object} myUserId
	 * @param {Object} friendUserId
	 */
	getUserChatSnapshotList: function(myUserId) {
		var chatKey = "chat-snapshot" + myUserId;
		// 从本地缓存查看聊天快照列表是否存在
		var chatSnapshotListStr = plus.storage.getItem(chatKey);
		var chatSnapshotList = [];
		if(app.isNotNull(chatSnapshotListStr)) {
			// 如果不为空，转成对应的JSON数组
			chatSnapshotList = JSON.parse(chatSnapshotListStr);
		}
		
		return chatSnapshotList;
	},
	/**
	 * 删除当前用户和某个好友的聊天快照记录
	 * @param {Object} myUserId
	 * @param {Object} friendUserId
	 */
	delUserChatSnapshot: function(myUserId, friendUserId) {
		var chatKey = "chat-snapshot" + myUserId;
		
		// 从本地缓存查看聊天快照的list
		var chatSnapshotListStr = plus.storage.getItem(chatKey);
		var chatSnapshotList = [];
		if(app.isNotNull(chatSnapshotListStr)) {
			// 如果不为空，转成对应的JSON数组
			var chatSnapshotList = JSON.parse(chatSnapshotListStr);
			// 循环快照list，删除和friendUserId匹配的旧快照记录
			for(var i = 0; i < chatSnapshotList.length; i++) {
				if(chatSnapshotList[i].friendUserId == friendUserId) {
					// 删除已经存在的friendUserId对应的快照对象
					chatSnapshotList.splice(i, 1);
					break;
				}
			}
			// 将聊天快照list存到缓存中
			plus.storage.setItem(chatKey, JSON.stringify(chatSnapshotList));
		}
	},
	/**
	 * 标记快照消息已读
	 * @param {Object} myUserId
	 * @param {Object} friendUserId
	 */
	markUserChatSnapshotRead: function(myUserId, friendUserId) {
		//console.log("标记快照消息为已读...");
		var chatSnapshotList = app.getUserChatSnapshotList(myUserId);
		if(chatSnapshotList.length > 0) {
			// 遍历快照集合，将对应的快照消息改为已读
			for(var i = 0; i < chatSnapshotList.length; i++) {
				if(chatSnapshotList[i].friendUserId == friendUserId) {
					// 标记快照消息为已读
					chatSnapshotList[i].isRead = true;
					//console.log("标记成功！");
					// 替换缓存中原有的快照列表
					plus.storage.setItem("chat-snapshot" + myUserId, JSON.stringify(chatSnapshotList));
					return;
				}
			}
		}
	}
}